package com.zmn.oms.business.interfaces.warranty;

import com.zmn.oms.model.dto.work.modify.OrderWarrantyUpdateDTO;
import com.zmn.base.oms.common.model.es.orderwork.EsOrderWork;
import com.zmn.oms.model.vo.warranty.*;

import java.util.List;
import java.util.Map;


/**
 * 类描述：保修卡业务实现
 * @author heciqi
 * @date 2018/11/29 17:35
 */
public interface OrderWarrantyBService {

	/**
	 * 根据userId查询绑定保修卡个数
	 * @param userId
	 * @param type
	 * @return
	 */
	Integer countByUserId(Long userId, Integer type);

	/**
	 * 通过订单id查询保单信息VO
	 *
	 * @param orderId 订单id
	 * @return 保单信息
	 */
	WarrantyVO findWarrantyVOByOrderId(Long orderId);

	/**
	 * 通过订单id查询保单信息
	 *
	 * @param orderId 订单id
	 * @return 保单信息
	 */
	WarrantyUserVO findWarrantyByOrderId(Long orderId);

    /**
     * 通过多个订单id，查询订单保单信息
     *
     * @param orderIdList 订单id集合
     * @return 保单信息
     */
    List<WarrantyListOrderVO> listWarrantyByOrderIdList(List<Long> orderIdList);

	/**
	 * 通过订单id和code查询保单信息
	 *
	 * @param orderId 订单id
	 * @param code    保修卡号
	 * @return 保单信息
	 */
	WarrantyUserVO findWarrantyByOrderIdAndCode(Long orderId, String code);

	/**
	 * 根据用户id获取保修卡列表
	 *
	 * @param userId 用户id
	 * @return 保单信息
	 */
	List<WarrantyListUserVO> listWarrantyByUserId(Long userId);

	/**
	 * 根据用户id获取工单相关
	 *
	 * @param esOrderWorks 用户id
	 * @return
	 */
	Map<Long, WarrantyListVO> listWarrantyByWorkList(List<EsOrderWork> esOrderWorks);

	/**
	 * 激活并领取保修卡
	 */
	void activeAndTakeWarranty(Long orderId);

	/**
	 * 激活保修卡
	 *
	 * @param orderId 订单id
	 * @return 激活结果
	 */
	void activeWarranty(Long orderId);

	/**
	 * 领取保修卡
	 *
	 * @param orderId 订单id
	 * @return 激活结果
	 */
	void takeWarranty(Long orderId,Long userId);

	/**
	 * 给老系统提供绑定保修卡接口
	 * @param openId
	 * @param orderId
	 * @return
	 */
	WarrantyVO bind(String openId, Long orderId);

	/**
	 * 修改保修时长
	 * @param orderId 订单Id
	 * @param month 月
	 */
	@Deprecated
    void updateWarrantyMonth(Long orderId, Integer month);

	/**
	 * 判断某一个产品是否存在保修项 <产品扩展proExtId , 是否存在保修项 1不存在 2存在>
	 * @param orderId
	 * @param workId
	 * @return
	 */
	Map<Long, Integer> isExistWarrantyInfoMap(Long orderId, Long workId);

    /**
     * 返修延保：自动延长保修时长
     * 原单首次返修，返修单完成时，增加原单保修时长
     */
	void autoAddWarrantyDay(OrderWarrantyUpdateDTO warrantyUpdateDTO);
}
